import { IContext, IEntityLocalDataService, IParam } from '@/core';
import { IIBIZSample0001 } from '../interface/i-ibiz-sample-0001';
import keys from '../ibiz-sample-0001-keys';


/**
 * IBIZSample0001DTODTO辅助类
 * 基于template/src/api/{{appEntities}}/data-service/{{appEntities}}-help.ts.hbs生成  
 *
 * @export
 * @class IBIZSample0001DTOHelp
 */
export class IBIZSample0001DTOHelp {

    /**
     * 获取实体数据服务
     *
     * @static
     * @param {IParam} context
     * @return {*}  {Promise<IEntityLocalDataService<IIBIZSample0001>>}
     * @memberof IBIZSample0001DTOHelp
     */
    public static async getService(context: IParam): Promise<IEntityLocalDataService<IIBIZSample0001>> {
        return App.getDataService('IBIZSample0001', context);
    }

    /**
     * 获取是否缓存
     *
     * @memberof IBIZSample0001DTOHelp
     */
    public static getEnableCache(){
        return false;
    }

    /**
     * DTO转化成数据对象
     *
     * @static
     * @param {IContext} context 应用上下文
     * @param {IParam} source dto对象
     * @return {*} 
     * @memberof IBIZSample0001DTOHelp
     */
    public static async toDataObj(context: IContext, source: IParam) {
        const _data: any = {};
        //  文本，可指定长度
        _data.field01 = source.field01;
        //  长文本，长度1000
        _data.field02 = source.field02;
        //  长文本，没有长度限制
        _data.field03 = source.field03;
        //  HTML文本，没有长度限制
        _data.field04 = source.field04;
        //  整型
        _data.field05 = source.field05;
        //  浮点
        _data.field06 = source.field06;
        //  数值
        _data.field07 = source.field07;
        //  日期时间型
        _data.field08 = source.field08;
        //  日期型
        _data.field09 = source.field09;
        //  时间型
        _data.field10 = source.field10;
        //  是否逻辑
        _data.field11 = source.field11;
        //  真假逻辑
        _data.field12 = source.field12;
        //  单项选择(数值)
        _data.field13 = source.field13;
        //  单项选择(文本值)
        _data.field14 = source.field14;
        //  多项选择(数值)
        _data.field15 = source.field15;
        //  多项选择(文本值)
        _data.field16 = source.field16;
        //  选择项文本
        _data.field24 = source.field24;
        //  数字串业务标识，数字类型，用户可见
        _data.field17 = source.field17;
        //  字符串业务标识，文本类型，用户可见
        _data.field18 = source.field18;
        //  货币
        _data.field19 = source.field19;
        //  货币单位
        _data.field20 = source.field20;
        //  出生日期
        _data.field21 = source.field21;
        //  电子邮件
        _data.field22 = source.field22;
        //  工作流处理状态
        _data.field27 = source.field27;
        //  地址信息
        _data.address = source.address;
        //  城市
        _data.city = source.city;
        //  颜色
        _data.color = source.color;
        //  建立时间
        _data.createdate = source.createdate;
        //  建立人
        _data.createman = source.createman;
        //  磁盘图片
        _data.diskimg = source.diskimg;
        //  属性23
        _data.field23 = source.field23;
        //  属性25
        _data.field25 = source.field25;
        //  属性26
        _data.field26 = source.field26;
        //  属性28
        _data.field28 = source.field28;
        //  属性3
        _data.field3 = source.field3;
        //  属性4
        _data.field4 = source.field4;
        //  属性5
        _data.field5 = source.field5;
        //  属性6
        _data.field6 = source.field6;
        //  属性7
        _data.field7 = source.field7;
        //  属性8
        _data.field8 = source.field8;
        //  属性9
        _data.field9 = source.field9;
        //  大整型
        _data.field = source.field;
        //  大数值
        _data.field2 = source.field2;
        //  IBIZSAMPLE0001标识
        _data.ibizsample0001id = source.ibizsample0001id;
        //  名称
        _data.ibizsample0001name = source.ibizsample0001name;
        //  首页图表数据源标识
        _data.ibizsample0002id = source.ibizsample0002id;
        //  示例实体02名称
        _data.ibizsample0002name = source.ibizsample0002name;
        //  IP地址
        _data.ip = source.ip;
        //  纬度
        _data.latitude = source.latitude;
        //  经度
        _data.longitude = source.longitude;
        //  图片
        _data.picture = source.picture;
        //  更新时间
        _data.updatedate = source.updatedate;
        //  更新人
        _data.updateman = source.updateman;
        //  处理预置字段（以srf开头）
        if (source && Object.keys(source).length > 0) {
            Object.keys(source).forEach((key:string) =>{
                if(key.startsWith('srf')){
                    _data[key] = source[key];
                }
            })
        }
        return _data;
    }

    /**
     * 转化数据（DTO转化成数据对象）
     *
     * @static
     * @param {IContext} context 应用上下文
     * @param {IParam} data 数据对象
     * @return {*} 
     * @memberof IBIZSample0001DTOHelp
     */
    public static async toDataObjArray(context: IContext, data: any[]) {
        const _data: any[] = [];
        if (data && Array.isArray(data) && data.length > 0) {
            for (let i = 0; i < data.length; i++) {
                const tempdata = await this.toDataObj(context, data[i]);
                _data.push(tempdata);
            }
        }
        return _data;
    }

    /**
     * 数据对象转化成DTO
     *
     * @static
     * @param {IContext} context 应用上下文
     * @param {IParam} source 数据对象
     * @return {*} 
     * @memberof IBIZSample0001DTOHelp
     */
    public static async toDto(context: IContext, source: IParam) {
        const _data: any = {};
        const excludes: string[] = [];
        //  文本，可指定长度
        if(source.hasOwnProperty('field01')){
            _data.field01 = source.field01;
        }
        //  长文本，长度1000
        if(source.hasOwnProperty('field02')){
            _data.field02 = source.field02;
        }
        //  长文本，没有长度限制
        if(source.hasOwnProperty('field03')){
            _data.field03 = source.field03;
        }
        //  HTML文本，没有长度限制
        if(source.hasOwnProperty('field04')){
            _data.field04 = source.field04;
        }
        //  整型
        if(source.hasOwnProperty('field05')){
            _data.field05 = source.field05;
        }
        //  浮点
        if(source.hasOwnProperty('field06')){
            _data.field06 = source.field06;
        }
        //  数值
        if(source.hasOwnProperty('field07')){
            _data.field07 = source.field07;
        }
        //  日期时间型
        if(source.hasOwnProperty('field08')){
            _data.field08 = source.field08;
        }
        //  日期型
        if(source.hasOwnProperty('field09')){
            _data.field09 = source.field09;
        }
        //  时间型
        if(source.hasOwnProperty('field10')){
            _data.field10 = source.field10;
        }
        //  是否逻辑
        if(source.hasOwnProperty('field11')){
            _data.field11 = source.field11;
        }
        //  真假逻辑
        if(source.hasOwnProperty('field12')){
            _data.field12 = source.field12;
        }
        //  单项选择(数值)
        if(source.hasOwnProperty('field13')){
            _data.field13 = source.field13;
        }
        //  单项选择(文本值)
        if(source.hasOwnProperty('field14')){
            _data.field14 = source.field14;
        }
        //  多项选择(数值)
        if(source.hasOwnProperty('field15')){
            _data.field15 = source.field15;
        }
        //  多项选择(文本值)
        if(source.hasOwnProperty('field16')){
            _data.field16 = source.field16;
        }
        //  选择项文本
        if(source.hasOwnProperty('field24')){
            _data.field24 = source.field24;
        }
        //  数字串业务标识，数字类型，用户可见
        if(source.hasOwnProperty('field17')){
            _data.field17 = source.field17;
        }
        //  字符串业务标识，文本类型，用户可见
        if(source.hasOwnProperty('field18')){
            _data.field18 = source.field18;
        }
        //  货币
        if(source.hasOwnProperty('field19')){
            _data.field19 = source.field19;
        }
        //  货币单位
        if(source.hasOwnProperty('field20')){
            _data.field20 = source.field20;
        }
        //  出生日期
        if(source.hasOwnProperty('field21')){
            _data.field21 = source.field21;
        }
        //  电子邮件
        if(source.hasOwnProperty('field22')){
            _data.field22 = source.field22;
        }
        //  工作流处理状态
        if(source.hasOwnProperty('field27')){
            _data.field27 = source.field27;
        }
        //  地址信息
        if(source.hasOwnProperty('address')){
            _data.address = source.address;
        }
        //  城市
        if(source.hasOwnProperty('city')){
            _data.city = source.city;
        }
        //  颜色
        if(source.hasOwnProperty('color')){
            _data.color = source.color;
        }
        //  建立时间
        if(source.hasOwnProperty('createdate')){
            _data.createdate = source.createdate;
        }
        //  建立人
        if(source.hasOwnProperty('createman')){
            _data.createman = source.createman;
        }
        //  磁盘图片
        if(source.hasOwnProperty('diskimg')){
            _data.diskimg = source.diskimg;
        }
        //  属性23
        if(source.hasOwnProperty('field23')){
            _data.field23 = source.field23;
        }
        //  属性25
        if(source.hasOwnProperty('field25')){
            _data.field25 = source.field25;
        }
        //  属性26
        if(source.hasOwnProperty('field26')){
            _data.field26 = source.field26;
        }
        //  属性28
        if(source.hasOwnProperty('field28')){
            _data.field28 = source.field28;
        }
        //  属性3
        if(source.hasOwnProperty('field3')){
            _data.field3 = source.field3;
        }
        //  属性4
        if(source.hasOwnProperty('field4')){
            _data.field4 = source.field4;
        }
        //  属性5
        if(source.hasOwnProperty('field5')){
            _data.field5 = source.field5;
        }
        //  属性6
        if(source.hasOwnProperty('field6')){
            _data.field6 = source.field6;
        }
        //  属性7
        if(source.hasOwnProperty('field7')){
            _data.field7 = source.field7;
        }
        //  属性8
        if(source.hasOwnProperty('field8')){
            _data.field8 = source.field8;
        }
        //  属性9
        if(source.hasOwnProperty('field9')){
            _data.field9 = source.field9;
        }
        //  大整型
        if(source.hasOwnProperty('field')){
            _data.field = source.field;
        }
        //  大数值
        if(source.hasOwnProperty('field2')){
            _data.field2 = source.field2;
        }
        //  IBIZSAMPLE0001标识
        if(source.hasOwnProperty('ibizsample0001id')){
            _data.ibizsample0001id = source.ibizsample0001id;
        }
        //  名称
        if(source.hasOwnProperty('ibizsample0001name')){
            _data.ibizsample0001name = source.ibizsample0001name;
        }
        //  首页图表数据源标识
        if(source.hasOwnProperty('ibizsample0002id')){
            _data.ibizsample0002id = source.ibizsample0002id;
        }
        //  示例实体02名称
        if(source.hasOwnProperty('ibizsample0002name')){
            _data.ibizsample0002name = source.ibizsample0002name;
        }
        //  IP地址
        if(source.hasOwnProperty('ip')){
            _data.ip = source.ip;
        }
        //  纬度
        if(source.hasOwnProperty('latitude')){
            _data.latitude = source.latitude;
        }
        //  经度
        if(source.hasOwnProperty('longitude')){
            _data.longitude = source.longitude;
        }
        //  图片
        if(source.hasOwnProperty('picture')){
            _data.picture = source.picture;
        }
        //  更新时间
        if(source.hasOwnProperty('updatedate')){
            _data.updatedate = source.updatedate;
        }
        //  更新人
        if(source.hasOwnProperty('updateman')){
            _data.updateman = source.updateman;
        }
        // 附加额外数据
        if (source && Object.keys(source).length > 0 && keys) {
            Object.keys(source).forEach((key: string) => {
                if (!keys.includes(key) && !excludes.includes(key)) {
                    _data[key] = source[key];
                }
            })
        }
        return _data;
    }

    /**
     * 转化数组(数据对象转化成DTO数组)
     *
     * @static
     * @param {IContext} context 应用上下文
     * @param {IParam[]} data 数据对象
     * @return {*} 
     * @memberof IBIZSample0001DTOHelp
     */
    public static async toDtoArray(context: IContext, data: IParam[]) {
        const _data: any[] = [];
        if (data && Array.isArray(data) && data.length > 0) {
            for (let i = 0; i < data.length; i++) {
                const tempdata = await this.toDto(context, data[i]);
                _data.push(tempdata);
            }
        }
        return _data;
    }

    /**
     * 处理响应DTO对象
     *
     * @static
     * @param {IContext} context 应用上下文
     * @param {IParam} data 数据对象
     * @return {*} 
     * @memberof IBIZSample0001DTOHelp
     */
    public static async set(context: IContext, data: IParam) {
        const _data: IParam = await this.toDataObj(context, data);
        return _data;
    }

    /**
     * 处理请求数据对象
     *
     * @static
     * @param {IContext} context 应用上下文
     * @param {IParam} data 数据对象
     * @return {*} 
     * @memberof IBIZSample0001DTOHelp
     */
    public static async get(context: IContext, data: IParam = {}) {
        return await this.toDto(context, data);
    }

    /**
     * 获取缓存数据
     *
     * @static
     * @param {IContext} context 应用上下文
     * @param {string} srfkey 数据主键
     * @return {*} 
     * @memberof IBIZSample0001DTOHelp
     */
    public static async getCacheData(context: IContext, srfkey: string) {
        return {};
    }

    /**
     * 获取缓存数组
     *
     * @static
     * @param {IContext} context 应用上下文
     * @return {*} 
     * @memberof IBIZSample0001DTOHelp
     */
    public static async getCacheDataArray(context: IContext) {
        return [];
    }

    /**
     * 设置缓存数据
     *
     * @static
     * @param {IContext} context 应用上下文
     * @param {IParam} data 数据
     * @return {*} 
     * @memberof IBIZSample0001DTOHelp
     */
    public static async setCacheData(context: IContext, data: IParam) {
    }

    /**
     * 设置缓存数组
     *
     * @static
     * @param {IContext} context 应用上下文
     * @param {any[]} data 数据
     * @return {*} 
     * @memberof IBIZSample0001DTOHelp
     */
    public static async setCacheDataArray(context: IContext, data: any[]) {
    }
}
